<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>什么是全栈开发者 - 技术翻译 - 开源中国社区</title>
<script type="text/javascript" src="http://www.oschina.net/js/2011/jquery-1.5.1.min.js?t=1399607778000"></script>
<script type="text/javascript" src="http://www.oschina.net/js/syntax-highlighter-2.1.382/scripts/brush.js?t=1399607772000"></script>
<link type="text/css" rel="stylesheet" href="http://www.oschina.net/js/syntax-highlighter-2.1.382/styles/shCore.css?t=1399607772000"/>
<link type="text/css" rel="stylesheet" href="http://www.oschina.net/js/syntax-highlighter-2.1.382/styles/shThemeDefault.css?t=1399607772000"/>
<script type='text/javascript'>
$(document).ready(function(){
    $('pre').each(function(){
        this.className = this.className.replace('toolbar: true;','');
        SyntaxHighlighter.highlight({toolbar:false},this);
    });
});
</script>
<style type='text/css'>
body{padding: 10px;margin: 0;background: white;color: #000000;}
body,table,input,textarea,select {font-family:微软雅黑,Verdana,sans-serif,宋体;}
a:link, a:visited {color: #000000;text-decoration: none;background: transparent;}
img {1px solid #cccccc;background-color: #fff;}
h1 {border-bottom:2px solid #666;padding:0 0 20px 0;}
.TextContent {line-height:1.2em;}
.TextContent pre {margin:10px 0;font-size:9pt;font-family:Courier New,Arial}
.TextContent code {margin: 0 2px;padding: 0 5px;white-space: nowrap;}
.TextContent pre>code {margin: 0;padding: 0;white-space: pre;border: none;background: transparent;}
.TextContent pre code{background-color: transparent;border: none;}
.TextContent ol,.TextContent ul {margin:20px 0 20px 20px;list-style-position: inside;}
.TextContent ol{list-style-type:decimal;margin: 0.5em 0 0.5em 1.5em;}
.TextContent ul{list-style-type:disc;margin: 0.5em 0 0.5em 1.5em;}
.TextContent img{max-width: 980px;}
.links{margin-top:1em;padding:1.25em 0;color:#666;}
.links a, .copyright a {color:#666;}
.links p{margin: 0; padding: 0;}
.copyright{padding:1.25em 0; border-top: 1px solid #AAA;color:#666;}
</style>
</head>
<body>
<h1>什么是全栈开发者</h1>
<div class="TextContent">
<p>纯粹基于道德而掌握开发堆栈的每一方面的预期是合理的吗？可能不是，但Facebook这样要求。一个Facebook的员工在OSCON告诉我，Facebook只雇佣全栈开发者。那么全栈开发者是什么意思呢？</p> 
<p>对我来说全栈开发者是对每一层都熟悉的人，如果不真正对所有的软件技术感兴趣不会对它们精通。</p> 
<p><strong>好的开发者</strong><strong>熟悉整个堆栈，他们是</strong><strong>知道如何使生活周边的事更容易的人</strong>。这就是为什么在办公室我如此反对偏执的原因，当然，政治及沟通挑战在大型组织中还是按固有的套路。我认为Facebook所持有的招聘政策是：如果聪明的人用脑用心，就能在更短的时间内构件更好的产品。</p>
<h2> <strong>全栈的层：</strong> </h2> 
<p> <strong><strong>1.服务器、网络和服务器环境</strong><br /> </strong> </p> 
<ol> 
 <li> <p> 知道哪里可能崩了和为什么会崩，没有什么是理所当然的。 </p> </li> 
 <li> <p> 适当的使用文件系统，云存储、网络资源，必须具备数据冗余和可用性的概念。 </p> </li> 
 <li> <p> 知道应用的伸缩性对硬件的需求。 </p> </li> 
 <li> <p> 什么是多线程和竞争条件？想想看，在开发机上你可能看不到这些，但是现实环境中它们就是会发生。 </p> </li> 
 <li> <p> 全栈coder还要能与运维并肩作战。提供有价值的错误信息和日志。<span style="line-height:1.5;font-size:10pt;">确保它们是可靠的，因为</span><span style="line-height:1.5;font-size:10pt;">运维会在你之前看到这些东西。（原文为<a href="http://zh.wikipedia.org/wiki/DevOps#.E5.AF.B9DevOps.E7.9A.84.E6.89.B9.E8.AF.84" target="_blank" rel="nofollow">DevOps</a>）</span> </p> </li> 
</ol> 
<p> <strong>2.数据建模</strong> </p> 
<ol> 
 <li> <p> 如果数据模型有缺陷，业务逻辑和上层逻辑就要用奇怪的代码（很丑）来弥补数据模型的缺陷。 </p> </li> 
 <li> <p> 全栈开发者要能够建立合理的、标准的关系模型，包括外键、索引、视图、查找表等。 </p> </li> 
 <li> <p> 全栈开发者要熟悉非关系型数据存储（应该指的不止是NoSQL），并且知道它们相对关系型存储优势所在。 </p> </li> 
</ol> 
<p> <strong>3，业务逻辑</strong> </p> 
<p> <span style="line-height:1.5;font-family:微软雅黑, Verdana, sans-serif, 宋体;font-size:10pt;"></span> </p> 
<ol> 
 <li> <p> 应用提供的核心价值。 </p> </li> 
 <li> <p> 可靠的面向对象技能。 </p> </li> 
 <li> <p> 可能会用到的框架。 </p> </li> 
</ol> 
<p> <span style="line-height:1.5;font-size:10pt;"><strong>4，API层、Action 层、MVC</strong></span> </p> 
<p> <span style="line-height:1.5;font-size:10pt;"> </span> </p> 
<ol> 
 <li> <p> 理解外部对数据模型和业务逻辑的操作。 </p> </li> 
 <li> <p> 该层会有很多框架应用。 </p> </li> 
 <li> <p> 全栈开发者要具备编写清晰、一致和易用的接口。过高的复杂度让人厌恶。 </p> </li> 
</ol> 
<p> <strong>5，UI</strong> </p> 
<p> <span style="background-color:#F6F6F6;"> </span> </p> 
<ol> 
 <li> <p> 全栈coder：a)知道如何创建可读的页面布局；b)或者明白自己需要帮助设计师。A或B，关键是要能有好的视觉设计。 </p> </li> 
 <li> <p> 掌握HTML5和CSS。 </p> </li> 
 <li> <p> JS正在逐步成为语言新锐，Javascript的世界里已经完成了很多激动人心的工作（node, backbone, knockout...）。 </p> </li> 
</ol> 
<p> <strong>6.用户体验</strong> </p> 
<p> <span style="background-color:#F6F6F6;"> </span> </p> 
<ol> 
 <li> <p> 全栈coder要知道用户需要的就是It works！ </p> </li> 
 <li> <p> 一个好的系统不会废了用户的手腕和眼睛。一个全栈coder会发现和审视需要8次点击、3步操作的流程，并最终把它一键搞定。 </p> </li> 
 <li> <p> 提供有价值的错误信息。如果崩溃了，就要向用户致歉。有时候程序员会写出让用户自我感觉很二的错误信息。 </p> </li> 
</ol> 
<span style="line-height:1.5;font-size:10pt;"><strong>7.知道用户和业务到底要什么</strong></span> 
<span style="background-color:#F6F6F6;"> 
 <ol> 
  <li> <p> 现在我们模糊了架构的界限，但却可能远离了实际需求。 </p> </li> 
  <li> <p> <span style="font-size:10pt;line-height:1.5;">全栈coder要明确知道用户使用软件时的场景，而且要领会业务。</span> </p> </li> 
 </ol> </span>
<p><strong>关于这个问题的其它方面：</strong> </p> 
<ol> 
 <li><p>编写高质量的单元测试能力。顺便说一下现如今连JS也可以做单元测试了。</p></li> 
 <li><p>持续集成。发掘程序构建中重复、可自动化的流程，在一定程度上自动完成测试、文档和部署。</p></li> 
 <li><p>对安全性的敏感，不同的层都可能有自己的脆弱点。</p></li> 
</ol> 
<p><span style="line-height:1.5;font-size:10pt;"><strong>最后：</strong></span> </p> 
<p><span style="line-height:1.5;font-size:10pt;">应用严重依赖一个特定的第三方实现（lib、系统、硬件等）是非常糟糕的实践。全栈开发者要知道了解全面不代表就可以走捷径。当然在抛弃原型法中，他们可以这么干。</span><span style="font-size:10pt;line-height:1.5;"></span></p> 
<p><span style="font-size:10pt;line-height:1.5;">在技术起步时很需要全栈开发者的多面技能。然而，在团队定型后，会越来越需要专注技能。</span></p> 
<p><span style="font-size:10pt;line-height:1.5;">我不觉得在具备了多语言、多平台甚至跨行业的职业生涯之前，你可以称自己为全栈开发者。全栈远超“高级工程师”，它更接近是多语言的开发者并且能在更高的角度看到之间的关联。注意在我的列表中只有3-5项涉及到编码。<br /> </span> </p>
</div>
<div class="links">
    <p>本文地址：<a href="http://www.oschina.net/translate/what-is-a-full-stack-developer">http://www.oschina.net/translate/what-is-a-full-stack-developer</a></p>
    <p>原文地址：<a href="http://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer/">http://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer/</a></p>
</div>
<div class="copyright">
    本文中的所有译文仅用于学习和交流目的，转载请务必注明文章译者、出处、和本文链接<br/>
    我们的翻译工作遵照 <a href='http://zh.wikipedia.org/wiki/Wikipedia:CC' target='_blank'>CC 协议</a>，如果我们的工作有侵犯到您的权益，请及时联系我们
</div>
</body>
</html>

<!-- Generated by OsChina.NET (init:1[ms],page:4[ms],ip:218.17.39.39) -->